#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

//编译服务随时可能被多个人请求，必须保证传递上来的code，形成源文件名称的时候，要具有唯一性\
要不然多个用户之间会相互影响。

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}


//  ./compile_server port
int main(int argc, char* argv[])
{
    if(argc !=  2){
        Usage(argv[0]);
        return 1;
    }
    Server svr;

    // svr.Get("/hello", [](const httplib::Request& req, httplib::Response& res) {
    //     res.set_content("Hello, World!你好，世界", "text/plain;charset=utf-8");
    // });

    svr.Post("/compile_and_run", [](const Request& req, Response& resp){
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application/json;charset=utf-8");
        }
    });

    svr.listen("0.0.0.0", atoi(argv[1]));

    //测试
    // //通过http让client给我们上传一个json string
    // std::string in_json;

    // Json::Value in_value;

    // //R"()", raw string
    // in_value["code"] = R"(#include<iostream>
    // int main(){
    //     std::cout << "你可以看见我了" << std::endl;
    //     return 0;
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 3;

    // Json::FastWriter writer;
    // in_json = writer.write(in_value);

    // std::cout << in_json << std::endl;

    // std::string out_json;
    // CompileAndRun::Start(in_json, &out_json);
    // std::cout << out_json << std::endl;


    
    return 0;
}